/**
 * Project Name:renshuaipeng-auth
 * File Name:AuthRoleController.java
 * Package Name:ren.renshuaipeng.auth.web
 * Date:2015年12月20日 下午8:25:45
 * Copyright (c) 2015, niao.shuai123@163.com All Rights Reserved.
 */

package ren.renshuaipeng.auth.web.controller;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import ren.renshuaipeng.auth.domain.auth.AuthRole;
import ren.renshuaipeng.auth.service.auth.AuthRoleService;
import ren.renshuaipeng.auth.web.BaseController;
import ren.renshuaipeng.util.DateUtil;
import ren.renshuaipeng.util.ajax.AjaxDto;
import ren.renshuaipeng.util.anno.Token;
import ren.renshuaipeng.util.anno.log.OperatorLog;
import ren.renshuaipeng.util.anno.log.OperatorLogType;

/**
 * ClassName:  AuthRoleController.java<br/>
 * Function: . <br/>
 * Date:      2015年12月20日 下午8:25:45<br/>
 *
 * @author 任帅鹏（作者）
 * @version V1.00 （版本号）
 * @see
 * @since JDK 1.8
 */
@Controller
@RequestMapping("/admin/role")
public class AuthRoleController extends BaseController{
	
	private static final String ROLE_LIST_PAGE = "role/list";
	private static final String ROLE_FORM_PAGE = "role/form";
	
	@Autowired
    private AuthRoleService authRoleService;

    /**
     * @Name: index
     * @Description:
     * @Author 任帅鹏（作者）
     * @Version V1.00 （版本号）
     * @Create Date: 2015-12-16 15:07:21（创建日期）
     * @Parameters: [pageable, model]
     * @Return java.lang.String
     * @Throws
     */
    @RequestMapping
    public String index(Pageable pageable, Model model) {
        model.addAttribute("page",authRoleService.findPage(pageable));
        return ROLE_LIST_PAGE;
    }

    /**
     * @Name: savePage
     * @Description:
     * @Author 任帅鹏（作者）
     * @Version V1.00 （版本号）
     * @Create Date: 2015-12-16 16:01:47（创建日期）
     * @Parameters: []
     * @Return java.lang.String
     * @Throws
     */
    @RequestMapping(value = "/save")
    @Token(save = true)
    public String savePage(Model model) {
    	model.addAttribute("action", "save");
        return ROLE_FORM_PAGE;
    }

    /**
    * @Name: save
    * @Description:
    * @Author 任帅鹏（作者）
    * @Version V1.00 （版本号）
    * @Create Date: 2015-12-16 16:02:36（创建日期）
    * @Parameters: [authUser]
    * @Return ren.renshuaipeng.util.ajax.AjaxDto
    * @Throws
    */
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    @Token(remove = true)
    @OperatorLog(getInfo = "新增角色", getType = OperatorLogType.SAVE)
    public String save(AuthRole authRole,RedirectAttributes redirectAttributes) {
    	authRole.setCreateTime(DateUtil.getCurrentTime());
    	authRoleService.save(authRole);
    	redirectAttributes.addFlashAttribute("info", new AjaxDto("添加成功"));
        return "redirect:/admin/role/save";
    }

    /**
    * @Name: updatePage
    * @Description:
    * @Author 任帅鹏（作者）
    * @Version V1.00 （版本号）
    * @Create Date: 2015-12-16 16:02:55（创建日期）
    * @Parameters: []
    * @Return java.lang.String
    * @Throws
    */
    @RequestMapping(value = "/update/{id}")
    @Token(save = true)
    public String updatePage(@PathVariable("id") String id,Model model) {
    	model.addAttribute("action", "update");
        model.addAttribute("role",authRoleService.findById(id));
        return ROLE_FORM_PAGE;
    }

    /**
    * @Name: update
    * @Description:
    * @Author 任帅鹏（作者）
    * @Version V1.00 （版本号）
    * @Create Date: 2015-12-16 16:03:06（创建日期）
    * @Parameters: [authUser]
    * @Return java.util.Map
    * @Throws
    */
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    @Token(remove = true)
    @OperatorLog(getInfo = "编辑角色", getType = OperatorLogType.UPDATE)
    public String update(@ModelAttribute("role")AuthRole authRole,RedirectAttributes redirectAttributes) {
    	authRoleService.save(authRole);
    	redirectAttributes.addFlashAttribute("info", new AjaxDto("编辑成功"));
		return "redirect:/admin/role/update/" + authRole.getId();
    }
    
    /**
	 * 所有RequestMapping方法调用前的Model准备方法, 实现Struts2
	 * Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
	 * 因为仅update()方法的form中有id属性，因此仅在update时实际执行.
	 */
	@ModelAttribute
	public void getRole(@RequestParam(value = "id", defaultValue = "") String id, Model model) {
		if (StringUtils.isNoneBlank(id)) {
			model.addAttribute("role", authRoleService.findById(id));
		}
	}

    /**
    * @Name: delete
    * @Description:
    * @Author 任帅鹏（作者）
    * @Version V1.00 （版本号）
    * @Create Date: 2015-12-16 16:03:14（创建日期）
    * @Parameters: [id]
    * @Return java.util.Map
    * @Throws
    */
    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
    @ResponseBody
    @OperatorLog(getInfo = "删除角色", getType = OperatorLogType.DELETE)
    public AjaxDto delete(@PathVariable("id") String id){    	
        authRoleService.delete(id);
        return new AjaxDto();
    	//throw new SQLException("1");
    }
}
